/**
 * 商品数据访问对象类
 * 业务层级：数据访问层
 * 功能说明：提供商品信息的数据库操作接口，包括增删改查、分类管理和统计功能
 * 架构关系：遵循四层架构设计，封装商品相关的数据库操作，为业务层提供数据服务
 */
#ifndef PRODUCTDAO_H
#define PRODUCTDAO_H

#include "database.h"
#include <QString>
#include <QVector>
#include <QMap>
#include <QVariant>

class ProductDAO
{
public:
    explicit ProductDAO(Database *db);

    // 检查商品是否存在
    bool isProductExist(const QString &product_name);

    // 添加新产品
    bool addProduct(const QString &product_name, const QString &specification,
                   const QString &color, const QString &supplier,
                   double purchase_price, double selling_price,
                   int category_id, bool allow_member_discount = true);

    QVector<QMap<QString, QVariant>> getProductsByCategory(int category_id); // 新增方法

    // 获取所有产品
    QVector<QMap<QString, QVariant>> getAllProducts();

    // 根据ID获取产品
    QMap<QString, QVariant> getProductById(int product_id);

    // 更新产品信息
    bool updateProduct(int product_id, const QString &product_name,
                      const QString &specification, const QString &color,
                      const QString &supplier, double purchase_price,
                      double selling_price, int category_id,
                      bool allow_member_discount);

    // 删除产品
    bool deleteProduct(int product_id);

    // 根据名称搜索产品
    QVector<QMap<QString, QVariant>> searchProductsByName(const QString &name);

    bool updateProductField(int productId, const QString &fieldName, const QVariant &value);

    QVector<QMap<QString, QVariant>> getAllCategories(); // 新增方法

    // 新增方法：获取分类统计信息
    QMap<int, int> getCategoryStatistics();

    QVector<QMap<QString, QVariant>> searchProductsByCode(const QString& code);

private:
    Database *m_db;
};

#endif // PRODUCTDAO_H
